home *** CD-ROM | disk | FTP | other *** search
- ;----------------------------------------------------------------
- ;超低速スムーススクロールダウン
- ; テキストの上から30行を2ドットずつスムーススクロールダウンします
- ; ESCで終了します
-
- .include doscall.mac
- .include iocscall.mac
-
- ;----------------------------------------------------------------
- ;ラスタコピーマクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- ;<dn.w:ソースラスタブロック番号*$0100+デスティネーションラスタブロック番号が
- ; 入っているレジスタ
- ;<sn.w:srを保存してあるレジスタ
- RASCPY .macro an,dn,sn
- @_1: tst.b (a0) ;水平帰線期間を待つ
- bmi @_1
- ori.w #$0700,sr ;割り込み禁止
- @_2: tst.b (a0) ;水平表示期間を待つ
- bpl @_2
- move.w dn,($00E8002C-$00E88001,an) ;ラスタブロック番号を設定
- move.w #8,($00E80480-$00E88001,an) ;ラスタコピー実行
- move.w sn,sr ;割り込み許可
- .endm
-
- ;----------------------------------------------------------------
- ;ラスタコピー終了マクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- RASEND .macro an
- @_1: tst.b (a0) ;水平帰線期間を待つ
- bmi @_1
- @_2: tst.b (a0) ;水平表示期間を待つ
- bpl @_2
- move.w #$0000,($00E80480-$00E88001,a0) ;ラスタコピー終了(clrは避ける)
- .endm
-
- ;----------------------------------------------------------------
- ;次の垂直帰線期間を待つマクロ
- ;<an.l:$00E88001に固定してあるアドレスレジスタ
- VSYNC .macro an
- @_1: btst.b #4,(a0) ;垂直表示期間を待つ
- beq @_1
- @_2: btst.b #4,(a0) ;垂直帰線期間を待つ
- bne @_2
- .endm
-
- ;----------------------------------------------------------------
- ;----------------------------------------------------------------
- ;メインルーチン
-
- ;スーパーバイザモードへ移行
- clr.l -(sp)
- DOS _SUPER
- move.l d0,(sp)
-
- ;カーソル消去
- IOCS _B_CUROFF
-
- move.w $00E8002A,-(sp)
-
- ;表の上30行を裏へコピー(下へ2ドットずらす)
- move.w #$0000,$00E8002A
- lea.l $00E00000,a0
- lea.l $00E10100,a1
- lea.l $00E20000,a2
- lea.l $00E30100,a3
- move.w #($800*30-$100)/256-1,d7
- 7:
- n = 0
- .rept 7
- movem.l (a0)+,d0-d6/a4-a5
- movem.l d0-d6/a4-a5,(n,a1)
- movem.l (a2)+,d0-d6/a4-a5
- movem.l d0-d6/a4-a5,(n,a3)
- n = n+36
- .endm
- move.l (a0)+,(36*7,a1)
- move.l (a2)+,(36*7,a3)
- lea.l (256,a1),a1
- lea.l (256,a3),a3
- dbra d7,7b
- lea.l $00E10000,a1
- lea.l $00E30000,a3
- n = 0
- .rept 7
- movem.l (a0)+,d0-d6/a4-a5
- movem.l d0-d6/a4-a5,(n,a1)
- movem.l (a2)+,d0-d6/a4-a5
- movem.l d0-d6/a4-a5,(n,a3)
- n = n+36
- .endm
- move.l (a0)+,(36*7,a1)
- move.l (a2)+,(36*7,a3)
-
- ;2ドットずつスムーススクロールダウン
- lea.l $00E88001,a0 ;$00E88001に固定
- move.w #%0011,($00E8002A-$00E88001,a0) ;ラスタコピープレーンセレクト
- move.w sr,d3 ;srを保存
- move.b #$F8,d4 ;ラスタブロック248
- loop:
- VSYNC a0 ;次の垂直帰線期間を待つ
- clr.b d5 ;ラスタブロック0
- moveq.l #120-1,d6
- 6: move.b d5,d0 ;表→裏
- lsl.w #8,d0
- move.b d4,d0
- RASCPY a0,d0,d3
- addq.b #1,d4
- cmp.b #$F8,d4
- bls @f
- move.b #$80,d4
- @@:
- move.b d4,d0 ;裏→表
- lsl.w #8,d0
- move.b d5,d0
- RASCPY a0,d0,d3
- addq.b #1,d5
- dbra d6,6b
- move.b d4,d0
- subq.b #1,d4
- bmi @f
- move.b #$F8,d4
- @@: lsl.w #8,d0
- move.b d4,d0
- ror.w #8,d0
- RASCPY a0,d0,d3
- RASEND a0
- btst.b #1,$0800.w ;ESCキーチェック
- beq loop
-
- move.w (sp)+,$00E8002A
-
- ;キーバッファフラッシュ
- bra 2f
- 1: IOCS _B_KEYINP
- 2: IOCS _B_KEYSNS
- tst.l d0
- bne 1b
-
- ;カーソル表示
- IOCS _B_CURON
-
- ;ユーザモードに復帰
- DOS _SUPER
- addq.l #4,sp
-
- ;終了
- DOS _EXIT
-